#!/bin/sh
# Copyright (C) 2006-2014 OpenWrt.org

. /lib/functions.sh

unset SERVER
unset PORT
unset INTERVAL
unset COUNT
unset INTERFACE_GLOBAL

NTPC=$(command -v ntpclient)

check_server() {
	local hostname
	local port
	local interface
	[ -n "$SERVER" ] && return
	config_get hostname $1 hostname
	config_get port $1 port
	config_get interface $1 interface

	[ -z "$interface" ] && interface=$INTERFACE_GLOBAL

	[ -n "$interface" ] && {
		# $INTERFACE is passed from hotplug event
		[ "$interface" = "$INTERFACE" ] || return
	}

	[ -z "$hostname" ] && return
	$NTPC -c 1 -p ${port:-123} -i 2 -h $hostname > /dev/null && { SERVER=$hostname; PORT=${port:-123}; }
}

set_drift() {
	config_get freq $1 freq
	[ -n "$freq" ] && adjtimex -f $freq >/dev/null
}

start_ntpclient() {
	config_foreach set_drift ntpdrift
	config_foreach check_server ntpserver
	[ -z "$SERVER" ] && exit 0
	logger starting ntpclient
	$NTPC ${COUNT:+-c $COUNT} ${INTERVAL:+-i $INTERVAL} -s -l -D -p $PORT -h $SERVER 2> /dev/null
}

stop_ntpclient() {
	logger stopping ntpclient
	killall ntpclient
}

load_settings() {
	local interval
	local count
	local interface

	config_get interval $1 interval
	config_get count $1 count
	config_get interface $1 interface

	[ -n "$count" ] && COUNT=$count
	[ -n "$interval" ] && INTERVAL=$interval
	[ -n "$interface" ] && INTERFACE_GLOBAL=$interface
}

config_load ntpclient
config_foreach load_settings ntpclient

NTP_RUNNING=$(busybox ps | grep $NTPC | grep -v grep)

case "${ACTION:-ifup}" in
	ifup)
		[ -z "$NTP_RUNNING" ] && start_ntpclient
	;;
	ifdown)
		[ -n "$NTP_RUNNING" ] && stop_ntpclient
	;;
esac
